package cc.comac.mom.datahandlers.entity;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import cc.comac.mom.dao.entity.EquipBenchmarkDao;
import cc.comac.mom.dao.entity.EquipRepairRepositoryDao;
import cc.comac.mom.dao.entity.EquipReqularCheckDao;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import cc.comac.mom.bean.EquipDevCategory;
import cc.comac.mom.bean.ResultDev;
import cc.comac.mom.dao.entity.EquipDevCategoryDao;
import cc.comac.mom.entity.EquipDevCategoryEntity;
import cc.comac.mom.util.BaseEntityDataUtil;
import cc.comac.mom.util.GetGeneralFieldValue;

@Component
@Transactional
public class EquipDevCategoryDataHandler extends ServiceImpl<EquipDevCategoryDao, EquipDevCategoryEntity>{
	
	@Autowired
	private EquipDevCategoryDao equipDevCategoryDao;
	
	@Autowired
	private BaseEntityDataUtil baseEntityDataUtil;
	
	public EquipDevCategory insert (EquipDevCategory equipDevCategory) {
		if (StringUtils.isEmpty(equipDevCategory.getDevCategoryNumber())) {
			throw new RuntimeException("设备种类编号不能为空");
		}
		QueryWrapper<EquipDevCategoryEntity> queryWrapper = new QueryWrapper<EquipDevCategoryEntity>();
		queryWrapper.eq("dev_category_number", equipDevCategory.getDevCategoryNumber());
		queryWrapper.eq("row_status", 1);
		List<EquipDevCategoryEntity> selectList = equipDevCategoryDao.selectList(queryWrapper);
		if (selectList.size() == 1) {
			throw new RuntimeException("设备类型编号"+equipDevCategory.getDevCategoryNumber()+"已存在！");
		}

		QueryWrapper<EquipDevCategoryEntity> queryWrapperName = new QueryWrapper<EquipDevCategoryEntity>();
		queryWrapperName.eq("dev_category_name", equipDevCategory.getDevCategoryName());
		queryWrapperName.eq("row_status", 1);
		List<EquipDevCategoryEntity> selectListName = equipDevCategoryDao.selectList(queryWrapperName);
		if (selectListName.size() >= 1) {
			throw new RuntimeException("设备类型名称"+equipDevCategory.getDevCategoryName()+"已存在！");
		}

		equipDevCategory.setRowStatus(1);
		baseEntityDataUtil.setBaseEntityData(equipDevCategory);
		int insert = equipDevCategoryDao.insert(equipDevCategory);
		if (insert != 1) {
			throw new RuntimeException("新增失败，新增总数量"+insert);
		}
		return equipDevCategory;
	}
	
	public int update (EquipDevCategory equipDevCategory) {
		if (equipDevCategory.getId() == 0) {
			throw new RuntimeException("当前未选择数据！,id为0");
		}
		if (StringUtils.isNotEmpty(equipDevCategory.getDevCategoryNumber())) {
			QueryWrapper<EquipDevCategoryEntity> queryWrapper = new QueryWrapper<EquipDevCategoryEntity>();
			queryWrapper.eq("dev_category_number", equipDevCategory.getDevCategoryNumber());
			List<EquipDevCategoryEntity> selectList = equipDevCategoryDao.selectList(queryWrapper);
			if (selectList.size() > 0) {
				for (EquipDevCategoryEntity equipDevCategoryEntity : selectList) {
					if (equipDevCategoryEntity.getId() != equipDevCategory.getId()) {
						throw new RuntimeException("设备类型编号"+equipDevCategory.getDevCategoryNumber()+"已存在！");
					}
				}
			}
		}
		if (StringUtils.isNotEmpty(equipDevCategory.getDevCategoryName())) {
			QueryWrapper<EquipDevCategoryEntity> queryWrapper = new QueryWrapper<EquipDevCategoryEntity>();
			queryWrapper.eq("dev_category_name", equipDevCategory.getDevCategoryName());
			List<EquipDevCategoryEntity> selectList = equipDevCategoryDao.selectList(queryWrapper);
			if (selectList.size() > 0) {
				for (EquipDevCategoryEntity equipDevCategoryEntity : selectList) {
					if (equipDevCategoryEntity.getId() != equipDevCategory.getId()) {
						throw new RuntimeException("设备类型名称"+equipDevCategory.getDevCategoryName()+"已存在！");
					}
				}
			}
		}
		baseEntityDataUtil.updateBaseEntityData(equipDevCategory);
		int updateById = equipDevCategoryDao.updateById(equipDevCategory);
		if (updateById != 1) {
			throw new RuntimeException("更新失败，更新数量为" + updateById);
		}
		return updateById;
	}
	
	public boolean batchDelete (List<EquipDevCategory> equipDevCategorys) {
		// 删除校验
		if(equipDevCategorys!=null&&equipDevCategorys.size()>0){
			List<String> s=equipDevCategoryDao.selectelationshipByCategoryId(equipDevCategorys);
			if(s!=null&&s.size()>0){
				throw new RuntimeException("以下数据被引用不能删除" + StringUtils.join(s,","));
			}
		}
		// *********
		List<EquipDevCategoryEntity> list = new ArrayList<EquipDevCategoryEntity>();
		for (EquipDevCategory equipDevCategory : equipDevCategorys) {
			EquipDevCategoryEntity equipDevCategoryEntity = new EquipDevCategoryEntity();
			equipDevCategoryEntity.setId(equipDevCategory.getId());
			equipDevCategoryEntity.setRowStatus(0);
			equipDevCategoryEntity.setLastModifiedTime(GetGeneralFieldValue.getLocalDateTime());
			equipDevCategoryEntity.setLastModifier(GetGeneralFieldValue.getCurrentUser());
			list.add(equipDevCategoryEntity);
		}
		boolean updateBatchById = updateBatchById(list);
		if (!updateBatchById) {
			throw new RuntimeException("删除失败");
		}
		return updateBatchById;
	}
	
	public ResultDev  selectByFields(EquipDevCategory equipDevCategory) {
		 ResultDev resultDev = new ResultDev();
		if (equipDevCategory.getPageNum() == 0) {
			equipDevCategory.setPageNum(1);
		}
		if (equipDevCategory.getPageSize() == 0) {
			equipDevCategory.setPageSize(10);
		}
		equipDevCategory.setPageNum((equipDevCategory.getPageNum() - 1)*equipDevCategory.getPageSize());
		List<EquipDevCategory> selectByFields = equipDevCategoryDao.selectByFields(equipDevCategory);
		Integer selectCount = equipDevCategoryDao.selectCountByFields(equipDevCategory);
		// 将查询总数除以每页数量后向上取整获取总页数
		double pageCount = Math.ceil((double)selectCount / equipDevCategory.getPageSize());
		resultDev.setEntityList(selectByFields);
		resultDev.setPageCount((int)pageCount);
		resultDev.setTotalQuantity((int)selectCount);
		return resultDev;
	}

	@Override
	public boolean updateBatchById(Collection<EquipDevCategoryEntity> entityList) {
		// TODO Auto-generated method stub
		return super.updateBatchById(entityList);
	}
	
	public ResultDev selectAll() {
		ResultDev resultDev = new ResultDev();
		QueryWrapper<EquipDevCategoryEntity> queryWrapper = new QueryWrapper<EquipDevCategoryEntity>();
		queryWrapper.eq("row_status", 1);
		List<EquipDevCategoryEntity> selectList = equipDevCategoryDao.selectList(queryWrapper);
		resultDev.setEntityList(selectList);
		return resultDev;
	}

	

	
}
